#define DEBUG
#include <cstdio>

using namespace std;

const int maxl=1000000, maxn=100000;

long long max(long long a, long long b) {
	return a>b ? a : b;
}

class Heap {
	public:
		long long k[maxn+1], v[maxn+1], size;

		bool cmp(int x, int y) {
			return k[x]<=k[y];
		}

		void swap(int x, int y) {
			long long t;
			t=k[x], k[x]=k[y], k[y]=t;
			t=v[x], v[x]=v[y], v[y]=t;
		}

		void up(int o) {
			if (o>1 && cmp(o, o/2)) {
				swap(o, o/2);
				up(o/2);
			}
		}

		void down(int o) {
			if (((o*2<size && cmp(o*2, o*2+1)) || o*2==size) && cmp(o*2, o)) {
				swap(o*2, o);
				down(o*2);
			} else if ((o*2<size && cmp(o*2+1, o*2)) && cmp(o*2+1, o)) {
				swap(o*2+1, o);
				down(o*2+1);
			}
		}

		void ins(long long key, long long value) {
			k[++size] = key;
			v[size] = value;
			up(size);
		}

		void pop() {
			swap(1, size);
			size--;
			down(1);
		}
};

int main() {
	freopen("laundry.in", "r", stdin);
	freopen("laundry.out", "w", stdout);

	static long long w[maxn+1], d[maxn+1], a[maxl+1], b[maxl+1];
	int l, n, m;
	scanf("%d %d %d", &l, &n, &m);
	for (int i=1; i<=n; i++) {
		scanf("%lld", w+i);
	}
	for (int i=1; i<=m; i++) {
		scanf("%lld", d+i);
	}

	static Heap wh, dh;
	for (int i=1; i<=n; i++) {
		wh.ins(w[i], i);
	}
	for (int i=1; i<=l; i++) {
		a[i] = wh.k[1];
		long long t=wh.v[1];
		wh.pop(), wh.ins(a[i]+w[t], t);
	}
	
	for (int i=1; i<=m; i++) {
		dh.ins(d[i], i);
	}
	for (int i=1; i<=l; i++) {
		b[i] = dh.k[1];
		long long t=dh.v[1];
		dh.pop(), dh.ins(b[i]+d[t], t);
	}

	long long ans=0;
	for (int i=1; i<=l; i++) {
		ans = max(ans, a[i]+b[l-i+1]);
	}
	printf("%lld", ans);

	fclose(stdin);
	fclose(stdout);
	return 0;
}
